'use strict';

// 导入模型的用户表
const { User } = require('../models');

// 导入工具函数
const auth = require('../utils/auth');

// 登录注册页
let sign_fn = async (ctx, next) => {
    ctx.render('sign-in-up.html');
}

// 登录验证判断
let login_fn = async (ctx, next) => {
    // 获取前端传过来的数据
    let username = ctx.request.body.inputUsername.trim() || '';
    let password = ctx.request.body.inputPassword.trim() || '';
    // 返回的状态和信息
    let res = '';
    // 判断用户名、密码是否符合基本要求，不符合则返回提示信息；符合基本要求则尝试从数据库中获取数据，判断用户名密码是否存在且一致，若都无误则登录成功，若有误则提示信息
    if (username !== '' && password !== '') {
        // 从数据库中根据用户名获取数据
        let row = await User.findOne({
            where: {
                username: username
            }
        });
        // 把查到的数据转化成JSON字符串类型
        let user1 = JSON.stringify(row);
        // 判断用户是否存在
        // 账号不存在
        if (user1 === 'null') {
            // 账号不存在
            res = { code: 1000, msg: '账号不存在，请先注册账号！' };
        } else if (user1 !== 'null' && password !== row.password) {
            // 账号存在，但密码不正确
            res = { code: 1000, msg: '密码错误！' };
        } else if (user1 !== 'null' && password === row.password) {
            // 数据不为空（也就是用户存在），且用户输入的密码与数据库中的密码匹配
            // 获取数据库中的用户id给session
            ctx.session.userId = row.id;
            // 获取数据库中的用户名给session
            ctx.session.userName = row.username;
            // 成功代码
            res = { code: 200 };
        } else {
            res = { code: 1000, msg: '未知错误，请联系管理员处理！' };
        }
    } else {
        res = { code: 1000, msg: '账号和密码不能为空！' };
    }
    // 返回信息
    ctx.response.body = JSON.stringify(res);
}

// 注册验证判断
let register_fn = async (ctx, next) => {
    // 获取前端传过来的数据
    let username = ctx.request.body.registerUsername.trim() || '';
    let password = ctx.request.body.registerPassword.trim() || '';
    let rePassword = ctx.request.body.registerRePassword.trim() || '';
    // 返回的状态和信息
    let res = '';
    // 判断用户名、密码、确认密码是否符合基本要求，不符合则返回提示信息；符合基本要求则尝试从数据库中获取数据，判断用户名是否已经存在，如存在返回提示信息，不存在则创建用户
    if (username !== '' && password !== '' && rePassword !== '' && password === rePassword) {
        // 从数据库中根据用户名查数据
        let row = await User.findOne({
            where: {
                username: username
            }
        });
        // 把查到的数据转化成JSON字符串类型
        let user1 = JSON.stringify(row);
        // 判断用户是否存在
        if (user1 === 'null') {
            // 用户不存在，往users表里插入数据
            let u1 = await User.create({
                username: username,
                password: password
            });
            // 将插入表中的数据转化成JSON字符串形式进行判断
            let u1Json = JSON.stringify(u1);
            if (u1Json !== 'null') {
                res = { code: 200, msg: '恭喜你，账号注册成功！' };
            } else {
                res = { code: 1000, msg: '因为服务器或网络原因，账号注册失败！' };
            }
        } else {
            res = { code: 1000, msg: '用户名已存在！' };
        }
    } else {
        res = { code: 1000, msg: '用户名、密码、确认密码都不能为空，且密码必须与确认密码一致！' };
    }
    // 返回消息
    ctx.response.body = JSON.stringify(res);
}

// 暴露出去
module.exports = {
    '/login': ['get', auth, sign_fn],
    '/loginDone': ['post', login_fn],
    '/registerDone': ['post', register_fn]
}